package com.xianzhi.service.impl;

import com.xianzhi.bean.Ad;
import com.xianzhi.dao.AdDao;
import com.xianzhi.dto.AdDto;
import com.xianzhi.service.AdService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Service
public class AdServiceImpl implements AdService {
  @Autowired
  private AdDao adDao;

  @Value("${adImage.savePath}")
  private String adImageSavePath;

  @Value("${adImage.url}")
  private String adImageUrl;

  @Override
  public List<AdDto> searchByPage(AdDto adDto) {
    List<AdDto> result = new ArrayList<>();
    Ad condition = new Ad();
    //要将AdDto对象中的所有属性值copy到Ad对象中，Spring中会提供一些工具类，快速完成。
    //condition.setTitle(adDto.getTitle());这种方法太麻烦了
    BeanUtils.copyProperties(adDto,condition);
    //调用dao中的方法
    List<Ad> adList = adDao.selectByPage(condition);//需要传入一个Ad对象
    //要将List<Ad>转换为List<AdDto>类型
    for (Ad ad:adList) {
      AdDto adDtoTemo = new AdDto();
      BeanUtils.copyProperties(ad,adDtoTemo);
      result.add(adDtoTemo);
    }
    return result;
}

  @Override
  public boolean add(AdDto adDto) {
    Ad ad = new Ad();
    ad.setTitle(adDto.getTitle());
    ad.setLink(adDto.getLink());
    ad.setWeight(adDto.getWeight());
    //判断文件是否为空
    if(adDto.getImgFile()!=null && adDto.getImgFile().getSize()>0){
      //如果文件存在我们要获取到上传文件的名称(格式为：系统时间_原始文件名)
      String fileName = System.currentTimeMillis()+"_"+adDto.getImgFile().getOriginalFilename();
      //要构造一下File对象(上传到服务器端的路径)
      File file = new File(adImageSavePath+fileName);
      File fileForder = new File(adImageSavePath);
      if(!fileForder.exists()){
        //创建一个文件夹
        fileForder.mkdirs();
      }
      try {
        //将文件上传到服务器
        adDto.getImgFile().transferTo(file);
        //还需要将文件名保存到数据库中
        ad.setImgFileName(fileName);
        //调用dao中的方法
        adDao.insert(ad);
        return true;
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return false;
  }


}
